<?php
class Propiedad extends CI_Model {

	// table name
	private $tbl_propiedad= 'propiedad';
	private $tbl_propiedadDeleted= 'propiedad_deleted';
	private $tbl_propiedadAdicional= 'propiedadadicional';
	private $tbl_propiedadAdicionalDeleted= 'propiedadadicional_deleted';
	private $tbl_propiedadServicio= 'propiedadservicio';
	private $tbl_propiedadServicioDeleted= 'propiedadservicio_deleted';
	private $tbl_propiedadEspacio= 'propiedadespacio';
	private $tbl_propiedadEspacioDeleted= 'propiedadespacio_deleted';
	
	
    function __construct()
    {
        // Call the Model constructor
        parent::__construct();
    }
    
	// get number of proyectos in database
	function count_all(){
		return $this->db->count_all($this->tbl_propiedad);
	}
	// get proyectos with paging
	function get_paged_list($limit = 10, $offset = 0){
		$this->db->order_by('idPropiedad','asc');
		return $this->db->get($this->tbl_propiedad, $limit, $offset);
	}
	// get person by id
	function get_by_id($id){
	
		$this->db->select($this->tbl_propiedad.'.*,tipooperacion.descripcion descTipoOperacion, barrio.descripcion barrio');
		$this->db->from($this->tbl_propiedad);
		$this->db->join('barrio', 'barrio.idBarrio = '.$this->tbl_propiedad.'.idBarrio');
		$this->db->join('tipooperacion', 'tipooperacion.idTipoOperacion = '.$this->tbl_propiedad.'.idTipoOperacion','left');
		$this->db->where('idPropiedad', $id);
		
		/*
		$propiedad = $this->db->get()->result();
		echo "model 1" . $propiedad[0]->descripcion;
		die();
		*/
		return $this->db->get(); 	
	
		//$this->db->where('idPropiedad', $id);
		//return $this->db->get($this->tbl_propiedad);
	}
	
	function get_by_portada(){
		$this->db->select($this->tbl_propiedad.'.*, tipooperacion.descripcion operacion, tipopropiedad.descripcion tipopropiedad, barrio.descripcion barrio');
		$this->db->from($this->tbl_propiedad);
		$this->db->join('barrio', 'barrio.idBarrio = '.$this->tbl_propiedad.'.idBarrio');
		$this->db->join('localidad', 'localidad.idLocalidad = '.$this->tbl_propiedad.'.idLocalidad');
		$this->db->join('tipooperacion', 'tipooperacion.idTipoOperacion = '.$this->tbl_propiedad.'.idTipoOperacion');
		$this->db->join('tipopropiedad', 'tipopropiedad.idTipo= '.$this->tbl_propiedad.'.idTipo');
		$this->db->where('tipooperacion.activo', 1);
		$this->db->where('esPortada', 1);
		$this->db->order_by($this->tbl_propiedad.'.idTipoOperacion','DESC');
		
		return $this->db->get();
	}
	
	// get person by id
	function get($idOperacion=null, $idTipoPropiedad=null, 
					$idZona=null, $idsLocalidades =null,
					$idsBarrios=null, $dormitorios=null,
					$ambientes=null,$desde= null, 
					$hasta = null, $moneda= null,
					$antigDesde= null,$antigHasta= null, 
					$supDesde= null,$supHasta= null, 
					$idAgrupador=null, $dependencia = null){
		
		
		$this->db->select($this->tbl_propiedad.'.*, tipooperacion.descripcion operacion, tipooperacion.pngTipoOperacion pngTipoOperacion, tipopropiedad.descripcion tipopropiedad ,barrio.descripcion barrio');
		$this->db->from($this->tbl_propiedad);
		$this->db->join('barrio', 'barrio.idBarrio = '.$this->tbl_propiedad.'.idBarrio');
		$this->db->join('localidad', 'localidad.idLocalidad = '.$this->tbl_propiedad.'.idLocalidad');
		$this->db->join('tipooperacion', 'tipooperacion.idTipoOperacion = '.$this->tbl_propiedad.'.idTipoOperacion');
		$this->db->join('tipopropiedad', 'tipopropiedad.idTipo= '.$this->tbl_propiedad.'.idTipo');
		//$this->db->where('idPropiedad', $id);
		
		if ($idOperacion!=null)
			$this->db->where($this->tbl_propiedad.'.idTipoOperacion', $idOperacion);
		else
			$this->db->where('tipooperacion.activo', 1);
		
		if ($idTipoPropiedad!=null)
			$this->db->where($this->tbl_propiedad.'.idTipo', $idTipoPropiedad);
		
		if ($idAgrupador!=null)
			$this->db->where('idAgrupador', $idAgrupador);
		
		
		if ($idZona!=null)
			$this->db->where('barrio.idZona', $idZona);
		
		if ($idsLocalidades!=null)
			$this->db->where_in('idLocalidad', $idsLocalidades);
		
		if ($idsBarrios!=null)
			$this->db->where_in($this->tbl_propiedad.'.idBarrio', $idsBarrios);

		if ($dormitorios!=null)
			$this->db->where('cantDormitorios', $dormitorios);
		
		if (!is_null($dependencia)){
			//$this->db->where('dependencia', $dependencia);
			//$this->db->or_where('dependencia', null);
			if ($dependencia == 1)
				$this->db->where('dependencia', $dependencia);
			else {
				$where = "(dependencia=" . $dependencia . " or dependencia is NULL)";
				$this->db->where($where);
			}
		}
			
		if ($ambientes!=null)
			$this->db->where('cantAmbientes', $ambientes);
			
		if ($antigDesde != null) $this->db->where('antiguedad >=' . $antigDesde, NULL, FALSE);
		
		if ($antigHasta != null) $this->db->where('antiguedad <=' . $antigHasta, NULL, FALSE);
		
		if ($supDesde != null) $this->db->where('superficieTotal >=' . $supDesde, NULL, FALSE);
		
		if ($supHasta != null) $this->db->where('superficieTotal <' . $supHasta, NULL, FALSE);
		
		if ($moneda != null){
			if ($moneda=='peso'){
				//$this->db->where('precioPeso BETWEEN ' . $desde . ' AND ' . $hasta, NULL, FALSE);
				if ($desde != null) $this->db->where('precioPeso >=' . $desde, NULL, FALSE);
				if ($hasta != null) $this->db->where('precioPeso <' . $hasta, NULL, FALSE);
				
			}else{
				//$this->db->where('precioDolar BETWEEN ' . $desde . ' AND ' . $hasta, NULL, FALSE);
				if ($desde != null) $this->db->where('precioDolar >=' . $desde, NULL, FALSE);
				if ($hasta != null) $this->db->where('precioDolar <' . $hasta, NULL, FALSE);
			}
		}
		$this->db->order_by('cantAmbientes','asc');
		if ($moneda=='peso'){
			$this->db->order_by("precioPeso", "asc"); 
		}else {
			$this->db->order_by("precioDolar", "asc"); 
		}
		
		return $this->db->get();
		
		/*var_dump($this->db->get()->result());
		die();
		*/
		/*
		$this->db->get();
		echo $this->db->last_query();
		die();
		*/
	}
	
	// get propiedades cercanas
	function getCercanas($lat,$lng,$radio,$idPropiedad){
		return $this->db->query(sprintf("SELECT idPropiedad,
												CONCAT(calle,' ',altura,', ',p.descripcion,', Argentina' ) AS address , 
												mapa_lat , 
												mapa_lng, 
												( 6371 * ACOS( COS( RADIANS('%s') ) * COS( RADIANS( mapa_lat ) ) * COS( RADIANS( mapa_lng ) - RADIANS('%s') ) + SIN( RADIANS('%s') ) * SIN( RADIANS( mapa_lat ) ) ) ) AS distance,
												titulo
										FROM propiedad i 
										INNER JOIN localidad p ON i.idLocalidad=p.idLocalidad 
										Where idPropiedad <> %s 
										HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",  $lat,  $lng,  $lat, $idPropiedad, $radio));
		//echo $this->db->last_query();
		//die();
		
	}
	
	
    function insert($data)
    {
        $this->db->insert($this->tbl_propiedad, $data);
		return $this->db->insert_id();
    }
	
    function copiarPropiedad($id)
    {
        //$this->db->call_function("copiarPropiedad", $id);
		$this->db->query("call copiarPropiedad(".$this->db->escape($id).");  ");
		//return $this->db->insert_id();
    }
	
	function restaurarPropiedad($id)
    {
        //$this->db->call_function("copiarPropiedad", $id);
		$this->db->query("call restaurarPropiedad(".$this->db->escape($id).");  ");
		//return $this->db->insert_id();
    }
	
	function update($id,$data)
    {
		$this->db->where('idPropiedad', $id);
		$this->db->update($this->tbl_propiedad, $data); 
    }
	
	function delete($id){
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedad); 
	}
	function deleteDeleted($id){
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedadDeleted); 
	}
	
	function get_adicionales($id)
	{
		$this->db->select($this->tbl_propiedadAdicional.'.*,adicional.descripcion');
		$this->db->from($this->tbl_propiedadAdicional);
		$this->db->join('adicional', 'adicional.idAdicional = propiedadadicional.idAdicional');
		$this->db->where('idPropiedad', $id);
		return $this->db->get(); 	
		//return $this->db->get($this->tbl_propiedadAdicional); 	
	}
	function get_adicionales_array($id)
	{
		$i = 0;
		$arr_adicionales = array();
		$adicionales  = $this->get_adicionales($id)->result();
		foreach ($adicionales as $val)
		{
			$arr_adicionales[$i] = $val->idAdicional;
			$i+=1;
		}
		//var_dump($arr_adicionales);
		return $arr_adicionales;
	}
	
	function get_servicios($id)
	{
		$this->db->select($this->tbl_propiedadServicio.'.*,servicio.descripcion');
		$this->db->from($this->tbl_propiedadServicio);
		$this->db->join('servicio', 'servicio.idServicio = ' . $this->tbl_propiedadServicio.' . idServicio');
		$this->db->where('idPropiedad', $id);
		return $this->db->get(); 
		
		//return $this->db->get($this->tbl_propiedadServicio); 	
	}
	function get_espacios($id)
	{
		$this->db->select($this->tbl_propiedadEspacio.'.*,espacio.descripcion');
		$this->db->from($this->tbl_propiedadEspacio);
		$this->db->join('espacio', 'espacio.idEspacio = ' . $this->tbl_propiedadEspacio.' .idEspacio');
		$this->db->where('idPropiedad', $id);
		$this->db->order_by('espacio.descripcion','asc');
		return $this->db->get(); 
		
		//return $this->db->get($this->tbl_propiedadEspacio); 	
	}
	function get_servicios_array($id)
	{
		$i = 0;
		$arr_servicios = array();
		$servicios  = $this->get_servicios($id)->result();
		foreach ($servicios as $val)
		{
			$arr_servicios[$i] = $val->idServicio;
			$i+=1;
		}
		//var_dump($arr_adicionales);
		return $arr_servicios;
	}
	function get_espacios_array($id)
	{
		$i = 0;
		$arr_espacios = array();
		$espacios  = $this->get_espacios($id)->result();
		foreach ($espacios as $val)
		{
			$arr_espacios[$val->idEspacio] = $val->valor;
			//$arr_servicios[$i] = array('id' => $val->idEspacio,'valor' => $val->valor);
			//$i+=1;
		}
		//var_dump($arr_espacios);
		//die();
		return $arr_espacios;
	}
	function insertAdicionales($id,$adicionales)
	{
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedadAdicional); 
		$data= null;
		for ($i=0; $i < count($adicionales); $i++)
		{
			if ( $adicionales[$i] != null)
			{
				$adicional = array(
						   'idAdicional' => $adicionales[$i],
						   'idPropiedad' => $id
				);
				$data[$i] = $adicional;
			}
		}
		if ($data!= null)
		$this->db->insert_batch($this->tbl_propiedadAdicional, $data); 
	}
	
	function deleteAdicionales($id){
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedadAdicional); 
	}
	function deleteAdicionalesDeleted($id){
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedadAdicionalDeleted); 
	}
	
	function insertServicios($id,$servicios)
	{
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedadServicio); 
		$data= null;
		for ($i=0; $i < count($servicios); $i++)
		{
			if ( $servicios[$i] != null)
			{
				$servicio = array(
						   'idServicio' => $servicios[$i],
						   'idPropiedad' => $id
				);
				$data[$i] = $servicio;
			}
		}
		
		if ($data!= null)
		$this->db->insert_batch($this->tbl_propiedadServicio, $data); 
	}

	function deleteServicios($id){
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedadServicio); 
	}
	function deleteServiciosDeleted($id){
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedadServicioDeleted); 
	}
	function insertEspacios($id,$espacios, $espaciosId)
	{
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedadEspacio); 
		$data= null;
		for ($i=0; $i < count($espacios); $i++)
		{
			if ( $espacios[$i] != "")
			{
				$espacio = array(
						   'idEspacio' => $espaciosId[$i],
						   'idPropiedad' => $id,
						   'valor' => $espacios[$i]
				);
				$data[$i] = $espacio;
			}
		}
		
		if ($data!= null)
		$this->db->insert_batch($this->tbl_propiedadEspacio, $data); 
	}
	
	function deleteEspacios($id){
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedadEspacio); 
	}
	function deleteEspaciosDeleted($id){
		$this->db->where('idPropiedad', $id);
		$this->db->delete($this->tbl_propiedadEspacioDeleted); 
	}
	function get_fotos($id,$plano = null,$fotoPrincipal=null)
	{
		$this->load->helper('directory');

		$map = directory_map(getcwd().'/assets/melamud/uploads/' . $id . '/');
		asort($map);
		$result= null;
		if ($map != null){
			if ($fotoPrincipal != null){
				$result[] = array(
					'name' => $fotoPrincipal,
					'pathMini' => base_url() . 'assets/melamud/uploads/' . $id . '/thumbnails/' . $fotoPrincipal,
					'path' => base_url() . 'assets/melamud/uploads/' . $id . '/' . $fotoPrincipal,
				);
			}
			foreach ($map as $k => $v)
			{
				if (!is_array($v)) {
					if (($plano==null || $plano != $v) && ($fotoPrincipal==null || $fotoPrincipal != $v)){
						$result[] = array(
							'name' => $v,
							'pathMini' => base_url() . 'assets/melamud/uploads/' . $id . '/thumbnails/' . $v,
							'path' => base_url() . 'assets/melamud/uploads/' . $id . '/' . $v,
						);
					}
				}
			}
		}	
		return $result;
	}
	
	function get_fotosEtiquetas()
	{
		$this->load->helper('directory');

		$map = directory_map(getcwd().'/assets/melamud/img/etiquetas/');
		$result= null;
		if ($map != null)
			foreach ($map as $k => $v)
			{
				if (!is_array($v)) {
					$result[] = array(
						'name' => $v,
						'path' => base_url() . 'assets/melamud/img/etiquetas/' . $v,
					);
				}
			}
		return $result;
	}

}
